package cn.choujay.tlias.service.impl;

import cn.choujay.tlias.domain.Dept;
import cn.choujay.tlias.domain.Emp;
import cn.choujay.tlias.mapper.DeptMapper;
import cn.choujay.tlias.mapper.EmpMapper;
import cn.choujay.tlias.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author Ye
 * @description 针对表【dept(部门表)】的数据库操作Service实现
 * @createDate 2023-05-20 20:52:38
 */
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Resource
    private DeptMapper deptMapper;
    @Resource
    private EmpMapper empMapper;

    @Override
    public List<Dept> getAllDept() {
        return deptMapper.getAllDept();
    }

    @Override
    public Boolean addDept(Emp emp) {
        Date now = Calendar.getInstance().getTime();
        emp.setUpdateTime(now);
        emp.setCreateTime(now);
        return deptMapper.addDept(emp);
    }

    //没有添加事务
    //然后开启事务
    //默认就是处理运行时候的事务
    //要指定错误的类型
    /*
    通过以上测试可以得出一个结论：默认情况下，只有出现RuntimeException(运行时异常)
    才会回滚事务。假如我们想让所有的异常都回滚，需要来配置@Transactional注解当中的rollbackFor属性，
    通过rollbackFor这个属性可以指定出现何种异常类型回滚事务。
     */
    @Transactional
    @Override
    public Boolean deleteDept(Integer[] ids) throws Exception {
        log.info("删除部门:");
        Boolean flag = deptMapper.deleteDept(ids);
        int x = 10 / 0;
        log.info("删除部门:{}", flag);

        return flag;
    }

    @Override
    public Boolean updateDeptById(Emp emp) {
        Date now = Calendar.getInstance().getTime();
        emp.setUpdateTime(now);
        return deptMapper.updateDeptById(emp);
    }
}
